/*
 * @Author: CPS
 * @Date: 2020-07-21 21:24:04
 * @Last Modified by:   CPS
 * @Last Modified time: 2020-08-05 17:10:38
 * @Projectname Electron-fileWatcher
 * @Filename addElement.js
 */
'use strict'

/**
 * 对制定的属性进行处理
 *
 * @param      {<type>}  targetObject  The target object
 * @param      {<type>}  fix           函数集合(需要和输入的目标相同键名)
 * @return     {<type>}  { description_of_the_return_value }
 */
function preFixArrt(targetObject, fix) {
  let tmp = targetObject
  try {
    for (let e in fix) {
      if (targetObject.hasOwnProperty(e)) {
        targetObject[e] = defaultPrefix[e](targetObject[e])
      }
    }
  } catch (e) {
    console.log(e)
    return tmp
  }
  return targetObject
}
/**
 * 根据传入的对象，创建对应结构的html标签
 *
 * @param      {<type>}  htmls   记录结构的集合
 * @param      {<type>}  preFix  预处理
 */
function addElement(htmls, preFix) {
  let defaultTamplate = {
    html: 'div',
    style: {
      className: 'testDiv',
      color: 'red',
    },
    text: 'testDiv'
  }

  let defaultPrefix = {
    '要处理的属性名': (name) => {
      return n + name
    },
  }

  if (!htmls) htmls = defaultTamplate;

  // 判断输入必须有给出合法的标签名
  if (!htmls.html) {
    htmls.html = 'div';
    if (preFix) htmls = preFixArrt(htmls, preFix);
  }

  // 创建父标签
  let parentDiv = document.createElement(htmls.html);

  // 创建附近信息
  if (htmls.hasOwnProperty('info')) {
    parentDiv['info'] = htmls['info']
  }

  // 添加样式
  if (htmls.style) Object.assign(parentDiv, htmls.style);
  if (preFix) htmls.style = preFixArrt(htmls.style, preFix);

  // 添加内容
  if (htmls.text) parentDiv.innerHTML = htmls.text;

  // 添加子标签
  if (htmls.child) {
    //如果需要添加子元素
    htmls.child.forEach(item => {
      parentDiv.appendChild(addElement(item))
    })
  }

  return parentDiv
}

module.exports = addElement